﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Primitive.Threading.Sync
{
    class SingleApplication
    {
        private static bool create_new;

        public static void Run()
        {
            using (new Semaphore(0, 1, "SomeUniqueStringIdentifyingMyApp", out create_new))
            {
                if (create_new)
                {
                    //这个线程创建了内核对象,所以肯定没有这个应用程序
                    //的其他实例正在运行.在这里运行应用程序的其余部分
                }
                else
                {
                    //这个线程打开一个具有相同字符串名称的,现有的内核对象
                    //表名肯定正在运行这个应用程序的另一个实例
                    //这里没什么可以做的事情,让我们从Main返回
                    //以终止应用程序的这个额外实例
                }
            }
        }
    }
}
